/**
 * 将表格的数值转成带.00的
 */
export function AutoFormat(auto) {
    var s = auto.split('.');
    if (s[1] == null || s[1] == undefined) {
        return auto + ".00";
    } else if (s[1].length == 1) {
        return auto + "0";
    } else {
        return auto;
    }
}

// 表单重置
export function resetForm(refName) {
    if (this.$refs[refName]) {
        this.$refs[refName].resetFields();
    }
}
// 回显数据字典
export function selectLabel(datas, value) {
    var actions = [];
    datas.forEach(data => { // 所有菜单
        if (data.dataType == value) {
            actions.push(data.dataName);
            return true;
        }
    })
    return actions.join('');
}

/**
 * 将用户输入的金额进行格式化，加上.00，如将99格式化成99.00，同时校验输入的是否为数值是否带有其他符号
 * @param amtvalue
 * @returns {string}
 */
export function amtvalueFormater(amtvalue) {
    let value = amtvalue;
    const check1 = /^(([1-9]{1}\d*)|(0{1}))$/;
    const check2 = /^(([1-9]{1}\d*)|(0{1}))(\.)$/;
    const check3 = /^(([1-9]{1}\d*)|(0{1}))(\.\d{1})$/;
    const check4 = /^(([1-9]{1}\d*)|(0{1}))(\.\d{2})$/;
    const check5 = /^(([1-9]{1}\d*)|(0{1}))(\.\d*)$/;
    if (check1.test(value) || check2.test(value) || check3.test(value) || check4.test(value)) {
        if (check1.test(value)) {
            amtvalue += ".00";
        } else if (check2.test(value)) {
            amtvalue += "00";
        } else if (check3.test(value)) {
            amtvalue += "0";
        }
    } else if (check5.test(value)) {
        let amt = value.split(".");
        amtvalue = amt[0] + '.' + amt[1].substring(0, 2);
    }
    return amtvalue;
}


/**
 * 数据库中金额单位是分，需要转换成圆
 * @param {*} number
 */
export function parseMoney(number) {
    if (isNaN(number)) {
        return null
    } else {
        return (number / 100).toFixed(2);
    }
}


/**
 * 设置金额的千分位，将金额改成1,000,948这种格式
 * @param num
 * @returns {string}
 */
export function formatCurrency(num) {
    if (num) {
        //将num中的$,去掉，将num变成一个纯粹的数据格式字符串
        num = num.toString().replace(/\$|,/g,'');
        //如果num不是数字，则将num置0，并返回
        if ('' == num || isNaN(num)) {
            return 'Not a Number ! ';
        }
        //如果num是负数，则获取她的符号
        var sign = num.indexOf("-") > 0 ? '-' : '';
        //如果存在小数点，则获取数字的小数部分
        var cents = num.indexOf(".") > 0 ? num.substr(num.indexOf(".")) : '';
        cents = cents.length > 1 ? cents : '';//注意：这里如果是使用change方法不断的调用，小数是输入不了的
        //获取数字的整数数部分
        num = num.indexOf(".") > 0 ? num.substring(0, (num.indexOf("."))) : num;
        //如果没有小数点，整数部分不能以0开头
        if ('' == cents) {
            if (num.length > 1 && '0' == num.substr(0, 1)) {
                return 'Not a Number ! ';
            }
        }
        //如果有小数点，且整数的部分的长度大于1，则整数部分不能以0开头
        else {
            if (num.length > 1 && '0' == num.substr(0, 1)) {
                return 'Not a Number ! ';
            }
        }
        //针对整数部分进行格式化处理，这是此方法的核心，也是稍难理解的一个地方，逆向的来思考或者采用简单的事例来实现就容易多了
        /*
          也可以这样想象，现在有一串数字字符串在你面前，如果让你给他家千分位的逗号的话，你是怎么来思考和操作的?
          字符串长度为0/1/2/3时都不用添加
          字符串长度大于3的时候，从右往左数，有三位字符就加一个逗号，然后继续往前数，直到不到往前数少于三位字符为止
         */
        for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
            num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
        }
        //将数据（符号、整数部分、小数部分）整体组合返回
        return (sign + num + cents);
    }
}

// 判断字符串是否为空
export function isEmpty(str) {
    if (str == "undefined" || str == "null"|| str == null) {
        return true;
    }
    return false;
}
// 转换字符串，undefined,null等转化为""
export function praseStrEmpty(str) {
    if (!str || str == "undefined" || str == "null") {
        return "";
    }
    return str;
}

const baseURL = process.env.VUE_APP_BASE_API
// 通用下载方法
export function download(fileName) {
    window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
}


// 添加日期范围,若初始化就调用这个方法，那么在重置按钮中得加入this.queryParams.params=null
export function addDateRange(params, dateRange, propName) {
    var search = params;
    search.params = search.params || {};
    if (null != dateRange && '' != dateRange) {
        if (typeof(propName) === "undefined") {
            search.params["beginTime"] = dateRange[0];
            search.params["endTime"] = dateRange[1];
        } else {
            search.params["begin" + propName] = dateRange[0];
            search.params["end" + propName] = dateRange[1];
        }
    }
    return search;
}



// 日期格式化
export function parseTime(time, pattern) {
    if (arguments.length === 0 || !time) {
        return null
    }
    const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
    let date
    if (typeof time === 'object') {
        date = time
    } else {
        if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
            time = parseInt(time)
        } else if (typeof time === 'string') {
            time = time.replace(new RegExp(/-/gm), '/');
        }
        if ((typeof time === 'number') && (time.toString().length === 10)) {
            time = time * 1000
        }
        date = new Date(time)
    }
    const formatObj = {
        y: date.getFullYear(),
        m: date.getMonth() + 1,
        d: date.getDate(),
        h: date.getHours(),
        i: date.getMinutes(),
        s: date.getSeconds(),
        a: date.getDay()
    }
    const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
        let value = formatObj[key]
        // Note: getDay() returns 0 on Sunday
        if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
        if (result.length > 0 && value < 10) {
            value = '0' + value
        }
        return value || 0
    })
    return time_str
}


//金额转为大写汉字
export const priceUppercase= (money) => {
    var cnNums = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖"); //汉字的数字
    var cnIntRadice = new Array("","拾","佰","仟"); //基本单位
    var cnIntUnits = new Array("","万","亿","兆"); //对应整数部分扩展单位
    var cnDecUnits = new Array("角","分","毫","厘"); //对应小数部分单位
    //var cnInteger = "整"; //整数金额时后面跟的字符
    var cnIntLast = "元"; //整型完以后的单位
    var maxNum = 999999999999999.9999; //最大处理的数字

    var IntegerNum; //金额整数部分
    var DecimalNum; //金额小数部分
    var ChineseStr=""; //输出的中文金额字符串
    var parts; //分离金额后用的数组，预定义
    if( money == "" ){
        return "";
    }
    money = parseFloat(money);
    if( money >= maxNum ){
        // $.alert('超出最大处理数字');
        return "";
    }
    if( money == 0 ){
        //ChineseStr = cnNums[0]+cnIntLast+cnInteger;
        ChineseStr = cnNums[0]+cnIntLast
        //document.getElementById("show").value=ChineseStr;
        return ChineseStr;
    }
    money = money.toString(); //转换为字符串
    if( money.indexOf(".") == -1 ){
        IntegerNum = money;
        DecimalNum = '';
        cnIntLast = '元整'
    }else{
        parts = money.split(".");
        IntegerNum = parts[0];
        DecimalNum = parts[1].substr(0,4);
    }
    let zeroCount = 0;
    let IntLen = 0;
    let n;
    let p;
    let m;
    let q;
    let decLen = 0;
    if( parseInt(IntegerNum,10) > 0 ){//获取整型部分转换
        zeroCount = 0;
        IntLen = IntegerNum.length;
        for( var i=0;i<IntLen;i++ ){
            n = IntegerNum.substr(i,1);
            p = IntLen - i - 1;
            q = p / 4;
            m = p % 4;
            if( n == "0" ){
                zeroCount++;
            }else{
                if( zeroCount > 0 ){
                    ChineseStr += cnNums[0];
                }
                zeroCount = 0; //归零
                ChineseStr += cnNums[parseInt(n)]+cnIntRadice[m];
            }
            if( m==0 && zeroCount<4 ){
                ChineseStr += cnIntUnits[q];
            }
        }
        ChineseStr += cnIntLast;
        //整型部分处理完毕
    }
    if( DecimalNum!= '' ){//小数部分
        decLen = DecimalNum.length;
        for( i=0; i<decLen; i++ ){
            n = DecimalNum.substr(i,1);
            if( n != '0' ){
                ChineseStr += cnNums[Number(n)]+cnDecUnits[i];
            }
        }
    }
    if( ChineseStr == '' ){
        //ChineseStr += cnNums[0]+cnIntLast+cnInteger;
        ChineseStr += cnNums[0]+cnIntLast;
    }/* else if( DecimalNum == '' ){
              ChineseStr += cnInteger;
              ChineseStr += cnInteger;
          } */
    return ChineseStr;
};


/**
 * 对内存大小进行转换
 * @param limit
 * @returns {string}
 */
export function changeMem(limit) {
    let size = "";
    if (limit < 0.1 * 1024) {                            //小于0.1KB，则转化成B
        size = limit.toFixed(2) + "B"
    } else if (limit < 0.1 * 1024 * 1024) {            //小于0.1MB，则转化成KB
        size = (limit / 1024).toFixed(2) + "KB"
    } else if (limit < 0.1 * 1024 * 1024 * 1024) {        //小于0.1GB，则转化成MB
        size = (limit / (1024 * 1024)).toFixed(2) + "MB"
    } else {                                            //其他转化成GB
        size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB"
    }

    const sizeStr = size + "";                        //转成字符串
    const index = sizeStr.indexOf(".");                    //获取小数点处的索引
    const dou = sizeStr.substr(index + 1, 2)            //获取小数点后两位的值
    if (dou == "00") {                                //判断后两位是否为00，如果是则删除00
        return sizeStr.substring(0, index) + sizeStr.substr(index + 3, 2)
    }
    return size;
}

/**
 * 校验手机号格式是否正确
 * @param number
 * @returns {null|*}
 * @constructor
 */
export function NumberFormater(number) {
    const check = /^(([1-9]{1}\d*)|(0{1}))$/;
    if(check.test(number)){
        return number;
    }else{
        return null;
    }
}